package com.company.jdk8;
import  org.junit.Test;

import java.util.Comparator;
import java.util.function.Consumer;

/**
 * @ProjectName: 复习java
 * @Package: com.company.jdk8
 * @ClassName: Lambda
 * @Author: wym
 * @Date: 2020/9/12 21:55
 * @Version: 1.0
 * 本质是函数式接口的实例 一个抽象方法
 */
public class Lambda {
    public static void main(String[] args) {

    }

    @Test
    public    void  testlambda1(){
        Runnable runnable = new Runnable(){
            @Override
            public void run() {
                System.out.println("我爱北京");
            }
        };
        runnable.run();
        //一个抽象方法
        Runnable runnable1=()->{
            System.out.println("111");
        };
        runnable1.run();

    }

    @Test
    public    void  testlambda2(){
        //一个抽象方法  1无参无返回值
        //本质是 一个实例 （接口的实例）
        Runnable runnable1=()->{
            System.out.println("111");
        };
        runnable1.run();
        //2有参数 无返回值
        Consumer<String> stringConsumer = new Consumer<String>(){
            @Override
            public void accept(String o) {

            }
        };
        Consumer<String> stringConsumer1=(String a)->{
            System.out.println(a);
        };

        stringConsumer1.accept("3333333");
        //可以不写类型 ,会自动根据前面的类型推断
        Consumer<String> stringConsumer2=(a)->{
            System.out.println(a);
        };
        stringConsumer2.accept("5555555");
        //只有一个参数 ,括号可以去掉
        Consumer<String> stringConsumer3=a->{
            System.out.println(a);
        };
        stringConsumer3.accept("66666");
    }

    @Test
    public  void  test3(){
        //有多个返回值，并且有 多条语句 有返回值
        Comparator<Integer> com1=(a1,a2)->{
            System.out.println(a1++);
            System.out.println(a2++);
            return  a1.compareTo(02);
        };
        System.out.println(com1.compare(22,24));
        //语法 当lambda 体  只有一条语句时  return 与大括号若有，都可以省略
        //  执行一条时 可能是 return 则  {} 也要一起省略
        Comparator<Integer> com2=(o1,o2)->o1.compareTo(o2);
        System.out.println(com2.compare(23,24));
    }


}
